home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / CMP / LPRM2 / HK / LPR_TERM / LPRTERMI.MOD < prev    next >
Encoding:
Modula Implementation  |  1993-11-30  |  2.3 KB  |  90 lines

  1. IMPLEMENTATION MODULE LPRTERMINATION;
  2.  
  3. (* 27-Nov-93, Holger Kleinschmidt *)
  4.  
  5. FROM SYSTEM IMPORT
  6. (* TYPE *) ADDRESS,
  7. (* PROC *) ADR, REG, VAL;
  8.  
  9. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  10.  
  11. VAR
  12.   t   : TermRecPtr;
  13.   r   : INTEGER;
  14.   acc : BOOLEAN;
  15.  
  16. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  17.  
  18. PROCEDURE IsAPP ( ): BOOLEAN;
  19. BEGIN
  20.  RETURN(NOT acc);
  21. END IsAPP;
  22.  
  23. (*---------------------------------------------------------------------------*)
  24.  
  25. PROCEDURE SetTermResult ((* EIN/ -- *) ret : INTEGER );
  26. BEGIN
  27.  r := ret;
  28. END SetTermResult;
  29.  
  30. (*---------------------------------------------------------------------------*)
  31.  
  32. PROCEDURE InstallTerm ((*    /AUS *) VAR term : TermRec;
  33.                        (* EIN/ -- *)     proc : PROC    );
  34. BEGIN
  35.  term.next := t;
  36.  term.proc := proc;
  37.  t         := ADR(term);
  38. END InstallTerm;
  39.  
  40. (*---------------------------------------------------------------------------*)
  41.  
  42. PROCEDURE FINALIZE ((* -- /AUS *) VAR ret : INTEGER );
  43. BEGIN
  44.  WHILE t <> NIL DO
  45.    t^.proc;
  46.    t := t^.next;
  47.  END;
  48.  ret := r;
  49. END FINALIZE;
  50.  
  51. (*---------------------------------------------------------------------------*)
  52.  
  53. PROCEDURE TERMINATE ((* EIN/ -- *) ret : INTEGER );
  54.  
  55. PROCEDURE Pterm (p1,f:INTEGER); CODE(4E41H);
  56.  
  57. BEGIN
  58.  Pterm(ret, 76)
  59. END TERMINATE;
  60.  
  61. (*---------------------------------------------------------------------------*)
  62.  
  63. PROCEDURE Terminate ((* EIN/ -- *) ret : INTEGER );
  64.  
  65. VAR r : INTEGER;
  66.  
  67. BEGIN
  68.  FINALIZE(r);
  69.  TERMINATE(ret);
  70. END Terminate;
  71.  
  72. (*===========================================================================*)
  73.  
  74. BEGIN (* LPRTERMINATION *)
  75.  (* Die Abfrage auf ein ACC funktioniert nur, weil durch die Initialisierung
  76.   * von 'System' und 'Terminal' (das von 'System' importiert wird) Register
  77.   * A0 nicht geaendert wird. Bei einem anderen 'System' oder 'Terminal'
  78.   * muss A0 zu Beginn der Initialisierung gerettet und zum Schluss wieder
  79.   * restauriert werden!!!
  80.   *)
  81.  BasePageP := VAL(ADDRESS,REG(8));
  82.  acc       := (BasePageP <> NIL) AND (BasePageP^.pParent = NIL);
  83.  (* Wenn das Programm unter Kontrolle des Laders laeuft, ist A0
  84.   * hoechstwahrscheinlich nicht NIL, aber pParent ist keinesfalls NIL,
  85.   * sodass "IsAPP()" dort immer TRUE liefert.
  86.   *)
  87.  r         := 0;
  88.  t         := NIL;
  89. END LPRTERMINATION.
  90.